home *** CD-ROM | disk | FTP | other *** search
- ; CPSDAT.ASM
- ; KERMIT - (Celtic for "FREE")
- ;
- ; This is the CP/M-80 implementation of the Columbia University
- ; KERMIT file transfer protocol.
- ;
- ; Version 4.0
- ;
- ; Copyright June 1981,1982,1983,1984,1985
- ; Columbia University
- ;
- ; Originally written by Bill Catchings of the Columbia University Center for
- ; Computing Activities, 612 W. 115th St., New York, NY 10025.
- ;
- ; Contributions by Frank da Cruz, Daphne Tzoar, Bernie Eiben,
- ; Bruce Tanner, Nick Bush, Greg Small, Kimmo Laaksonen, Jeff Damens, and many
- ; others.
- ;
- ; Pure and impure data areas. Previously of CPSUTL.ASM
- ;
- ; revision history:
- ;
- ;edit 19, 29-Mar-1991 by MF. Add flag "initak" (nonzero) which is cleared
- ; after the initial automatic TAKE attempt of KERMIT.INI to allow
- ; "unable to find file" complaints if not doing that initial TAKE.
- ;edit 18, 21-Mar-1991 by MF. Renamed parameter vermin to revno (revision
- ; level) since verno is already known as the "minor version number".
- ;edit 17, 27-Feb-1991 by MF. Corrected typeo in "inms19" and commented out
- ; "typptr" pointer as the TYPE command now uses the big buffer.
- ; Also provided for a "minor version number" (1-26=A-Z) and message to
- ; facilitate display of Kermit version in VERSION command (modmsg)
- ;edit 16, 12-Feb-1991 by MF. Eliminated storage (message and variable)
- ; for case sensitivity by commenting it out.
- ;edit 15, 9-Dec-1990 by MF. Modified message for "directory file size"
- ; status report to make it clearer when spoken by a speech synthesizer.
- ;edit 14, 4-Dec-1990 by MF. Added message for Autoreceive status report.
- ;edit 13, 30-Nov-1990 by MF. Added messages to display regular/quiet status
- ; of terminal in SHOW and STATUS commands.
- ;edit 12, 8-Nov-1990 by MF. Added a new message for Set Autoreceive.
- ;edit 11, 2-Nov-1990 by MF. Moved overlay address to 7000H -- I didn't
- ; realize I was **that** close to the limit until I made a couple of
- ; cosmetic changes and REM CD bombed. This is still ver. 4.10 as it
- ; hasn''t been released yet.
- ;edit 10, 1-Nov-1990 by MF. Changed message at "spdst" to conform with
- ; the change of "SET BAUD-RATE" to "SET SPEED".
- ; Also added message "sdpst2" for speed status (staspd) routine
- ;edit 9, 17-Oct-1990 by MF. Changed "packet-size" messages to use the
- ; word "length" to conform with the nomenclature suggested in the
- ; 6th edition of the Kermit Protocol Manual.
- ;edit 8, 19-Sep-1990 by MF. Added error message for FRENAME command.
- ;edit 7, 14-Sep-1990 by MF. Added storage/strings for SET COLLISION command.
- ; Also added strings/storage for SET INCOMPLETE-FILE command.
- ;edit 6, 9-Sep-1990 by MF. Added messages and storage for Remote commands.
- ; and display of packet sizes
- ; Moved overlay address to 06C00H for Version 4.10.
- ; edit 5, 8 April, 1987 by OBSchou. Added new entry in jump table to call
- ; code for an external terminal type. Added some new error messages
- ; and added more to the packet space.
- ;
- ; edit 4, 30 March by OBSchou. Added in space for autoreceive.
- ;
- ; edit 3, 19 March, 1987 by OBSchou. Added some more strings etc, and
- ; increased the stack space fro 32 entries to 64.
- ;
- ; edit 2, 11 March, 1987 by OBSchou.
- ; Added in some more data and strings and things. Nothing special
- ;
- ; edit 1, 28 January, 1987 by OBSchou
- ; Following file the data section of CPSUTL.ASM. This part of the
- ; CPSUTL.ASM file now seperate as it ws getting too larg. Link to here
- ; from CPSUTL.ASM (which now has only the utlity routines).
- ; Also added in bits submitted by Dave Roberts of Leicester:
- ; DJR 18th January 1987 - David J. Roberts.
- ; Support for cosmetic changes in CPSMIT:
- ; New strings DBGST and CURDST
- ; CRLF in front of TIMMSG
- ; LOGST changed, and new LOGST2
- ;
- ;
- datver: db 'CPSDAT.ASM (19) 29-Mar-1991$'
-
-
-
- ;
-
- version:db 'Kermit-80 v4.'
- db (verno/10) + '0' ; tenth's digit of version number
- db (verno MOD 10) + '0' ; hundredth's digit
- IF revno ;[MF]If a revision level,
- db revno+'@' ;[MF]put it in (range 1-26=A-Z)
- ENDIF ;revno [MF]
- db ' $'
- modmsg: db ' has been built from the following modules:$';[MF]
- kerm: db 'Kermit-80 '
- kerm1: db 'nnx:>$' ;'x' filled in at startup with DRIVE name
- ;'nn filled at startup and user with user number
- crlf: db cr,lf,'$'
- ermes1: db cr,lf,'?Unrecognized command$'
- ermes3: db cr,lf,'?Not confirmed$'
- ermes4: db '?Unable to receive initiate',cr,lf,'$'
- ermes5: db '?Unable to receive file name',cr,lf,'$'
- ermes6: db '?Unable to receive end of file',cr,lf,'$'
- erms10: db '?Unable to receive data',cr,lf,'$'
- erms11: db '?Disk full',cr,lf,'$'
- erms12: db '?Directory full',cr,lf,'$'
- erms14: db '?Unable to receive an acknowledgement from the host',cr,lf,'$'
- erms15: db cr,lf,'?Unable to find file',cr,lf,'$'
- erms16: db '?Unable to rename file$'
- erms17: db cr,lf,'?Disk full$'
- erms18: db cr,lf,'?Unable to tell host that the session is finished$'
- erms19: db cr,lf,'?Unable to tell host to logout$'
- erms20: db cr,lf,'?Kermit has not been configured for a target system$'
- erms21: db cr,lf,'?Consistency check on configuration failed$'
- erms22: db cr,lf,'?Error writing to log file',cr,lf,'$' ;[pcc005]
- erms23: db cr,lf,'?Invalid user number$'
- erms24: db cr,lf,'?Invalid Pause parameter$'
- erms25: db cr,lf,'?Invalid BUFFER-SIZE parameter$'
- erms26: db cr,lf,'?Invalid packet length (too long)$'
- erms27: db cr,lf,'?Invalid Checktype$'
- erms28: db cr,lf,'?Too many retries$'
- erms29: db cr,lf,'?Failed to exchange parameters$'
- erms30: db cr,lf,'?Failed to receive input string in alloted time$'
- erms31: db cr,lf,'?File already exists$' ;[MF]
-
- infms3: db bell,'Completed$'
- infms4: db bell,'Failed$'
- infms5: db '%Renaming file to $'
- infms6: db cr,lf,'[Closing the log file]$'
- infms7: db cr,lf,'[Connected to remote host. Type $'
- infms8: db 'C to return;',cr,lf,' type $'
- inms8a: db '? for command list]',cr,lf,'$'
- infms9: db cr,lf,'[Connection closed, back at micro]$'
- inms10: db 'Control-$'
- inms11: db ' Not implemented.$'
- inms12: db ' (Not implemented)',cr,lf,'$'
- inms13: db bell,'Interrupted$'
- inms14: db TAB,TAB,' Directory for drive '
- dnam14: db 'nnx:',cr,lf,'$' ;filled in by dir routine.
- inms15: DB CR,LF,TAB,TAB,'Drive $'
- inms16: DB ' has $';filled in by summary code with drive letter
- inms17: DB 'K bytes free',CR,LF,'$'
- inms18: DB CR,LF,'File(s) erased$',CR,LF
- inms19: db cr,lf,'[Transmitting file to host:'
- db cr,lf,' 1. Lines automatically sent, and wait for possible reply'
- db cr,lf,' 2. CONTROL-C aborts transfer'
- db cr,lf,' 3. If transfer hangs, try a return to continue'
- db cr,lf,' 4. on exit, you will be placed in CONNECT state.'
- db cr,lf,'$'
- inms20: db 'R to send the same line again,'
- db cr,lf,' or type $'
- inms21: db 'C to abort transmission.]',cr,lf,'$'
- inms22: db cr,lf,'[Transmission done. Connected normally '
- db 'to remote host,'
- db cr,lf,' type $'
- inms23: db 'Sending...$'
- inms24: db 'Receiving...$'
- inms25: db bell,'Warning: eighth bit cannot be sent$'
- inms26: db cr,lf,'For help, type ? at any point in a command$'
- inms27: db cr,lf,'[Logging suspended]',cr,lf,'$' ;[pcc003]
- inms28: db cr,lf,'[Logging resumed]',cr,lf,'$' ;[pcc003]
- inms29: db cr,lf,'[Transmission Aborted. Connected normally '
- db 'to remote host,'
- db cr,lf,' type $'
- autmes: db cr,lf,cr,lf,'[Automatically receiving; type ^C to abort]'
- db cr,lf,cr,lf,'$' ;[MF]
- anymes: db cr,lf,cr,lf,' * * * Press any key to continue * * * '
- db cr,lf,cr,lf,'$'
- escmes: db cr,lf,'Type the new escape character: $'
- tacmes: db cr,lf,'Type the new TAC intercept character: $'
- sopmes: db cr,lf,'Give the start-of-packet character: $' ;[gnn]
- padcms: db cr,lf,'Type the new padding character: $' ;[obs]
- xmthlp: db cr,lf,'R Send the same line again$'
- loghlp: db cr,lf,'Q Suspend logging' ;[pcc003]
- db cr,lf,'R Resume logging$' ;[pcc003]
- inthlp: db cr,lf,'? This message'
- db cr,lf,'C Close the connection'
- db cr,lf,'0 (zero) Transmit a NULL'
- db cr,lf,'P Toggle printer on/off' ;[pcc002]
- db cr,lf,'S Status of the connection$'
- inhlp1: db cr,lf,'Typing another $'
- inhlp2: db ' will send it to the host'
- db cr,lf,cr,lf,'Command>$'
-
- xmtst: db cr,lf,'Transmitting a file$'
- autrst: db cr,lf,'Autoreceive is$'
- locst: db cr,lf,'Local echo$'
- onstr: db ' on$'
- offstr: db ' off$'
- flost: db cr,lf,'Flow control$'
- ;senst: db cr,lf,'Case sensetivity$'
- vtdpst: db cr,lf,'Terminal display is $'
- vtdpsr: db 'REGULAR$'
- vtdpsq: db 'QUIET$'
- vtemst: db cr,lf,'Terminal emulation is $'
- cpmst: db cr,lf,'File Mode$'
- defstr: db ' default$'
- ascstr: db ' ASCII$'
- binstr: db ' binary$'
- hfsod: db cr,lf,'Display file size on DIRECTORY command$'
- ibmst: db cr,lf,'IBM flag$'
- incst: db cr,lf,'Disposition for incomplete files is$'
- dscstr: db ' discard$'
- kepstr: db ' keep$'
- filst: db cr,lf,'File warning$'
- prst: db cr,lf,'Printer copy$'
- logst: db cr,lf,'Logging to $' ;[pcc003][DJR]
- logst2: db ' is$' ;[DJR]
- susstr: db ' suspended$' ;[pcc003]
- sspmsg: db cr,lf,'SEND start-of-pkt char ^$' ;[gnn]
- rspmsg: db cr,lf,'RECEIVE start-of-pkt char ^$' ;[gnn]
- spsmsg: db cr,lf,'SEND packet length $' ;[MF]
- rpsmsg: db cr,lf,'RECEIVE packet length $' ;[MF]
- escst: db cr,lf,'Escape char: $'
- bufsz1: db cr,lf,'Multi-sector buffering at $'
- bufsz2: db ' of a maximum of $'
- xmitst: db cr,lf,'Transmit protocol char: $'
- bckst: db cr,lf,'Block check type: $'
- bckst1: db '-character$'
- collst: db cr,lf,'File COLLISION: $';[MF]
- parst: db cr,lf,'Parity: $'
- pnonst: db 'none$'
- pmrkst: db 'mark$'
- pspcst: db 'space$'
- poddst: db 'odd$'
- pevnst: db 'even$'
- porst: db cr,lf,'Port in use is: $'
- spdst: db cr,lf,'Current speed is: $'
- spdst2: db ' bps$' ;[MF]
- spdust: db 'indeterminate (not SET)$'
- timmsg: db cr,lf,'Timer$' ;[DJR] Added CRLF like the others
- tacst: db cr,lf,'Current TACTrap Status/Intercept Character: $'
- usrst: db cr,lf,'Current user number: $'
- dbgst: db cr,lf,'Debugging$' ;[DJR]
- curdst: db cr,lf,'Current default disk: $' ;[DJR]
- spac15: db ' $' ; *** 15 spaces ***
- samems: db cr,lf,'?Source and destination files the same$'
- nofile: db cr,lf,'?File not found$'
- cmer00: db cr,lf,'?Program error: Invalid COMND call$'
- cmer01: db cr,lf,'?Ambiguous$'
- cmer02: db cr,lf,'?Illegal CP/M file specification$'
- cmer03: db cr,lf,'?Wild-cards not allowed in file specification$' ;[pcc006]
- cmer04: db cr,lf,'?Invalid user number$'
- cmer05: db cr,lf,'?Invalid \ parameter$'
- cmin00: db ' Confirm with carriage return$'
- cmin01: db ' Enter a number$'
- cmin02: db ' Confirm with carriage return or enter more$'
-
- ; Diagnostic messages
- sstatm: db '<SState:> ',0
- rstatm: db '<RState:> ',0
- spackm: db '<Data transmitted> ',0
- rpackm: db '<Data received > ',0
- princr: db cr,lf,0
- ;
- ; Remote command messages [MF]
- ;
- newfms: db cr,lf,'New file: $'
- pswdms: db cr,lf,'Password: $'
- acctms: db cr,lf,'Account: $'
- newnms: db cr,lf,'New name: $'
- msgms: db cr,lf,'Message: $'
- optms: db cr,lf,'Options: $'
-
- ;
- ;Impure data
-
- ;COMND storage
-
- comchr: ds 1 ;[8] save space
- floctl: db 0 ;[8] flow control on/off flag
- ;casens: db 0 ;[8] Upper/lower case sensitive
- cmstat: ds 1 ;What is presently being parsed.
- cmaflg: ds 1 ;Non-zero when an action char has been found.
- cmbflg: ds 1 ;[MF]Nonzero to allow a blank initial keyword
- cmqflg: ds 1 ;[MF]Nonzero to prevent character echoing
- ;[MF]when entering commands
- cmccnt: ds 1 ;Non-zero if a significant char is found.
- cmsflg: ds 1 ;Non-zero when the last char was a space.
- cmostp: ds 2 ;Old stack pointer for reparse.
- cmrprs: ds 2 ;Address to go to on reparse.
- cmprmp: ds 2 ;Address of prompt.
- cmptab: ds 2 ;Address of present keyword table.
- cmhlp: ds 2 ;Address of present help.
- cmdbuf: ds 80H ;Buffer for command parsing.
- cmbufl equ $-cmdbuf-3 ; set a limit on the command buffer
- cmfcb: ds 2 ;Pointer to FCB.
- cmfcb2: ds 2 ;Pointer to position in FCB.
- cmfwld: ds 1 ;Wildcard flag
- cmcptr: ds 2 ;Pointer for next char input.
- cmdptr: ds 2 ;Pointer into the command buffer.
- cmkptr: ds 2 ;Pointer to keyword.
- cmsptr: ds 2 ;Place to save a pointer.
- slshsn: db 0 ; slash seen in command line
- slashc: db 0 ; count for number of characters in slash sequence
- slashn: db 0 ; number to be built for \xxx
- ;
- oldsp: ds 2 ;Room for old system stack.
- ds 80H ;Room for 64 levels of calls.[obs]
- stack: ds 2
- eoflag: ds 1 ;EOF flag;non-zero on EOF.
- curdsk: db 0 ;holds "logged" disk
- curusr: db 0 ;[8] holds "user" number
- rcvsop: db SOH ;[gnn] receive start-of-packet
- sndsop: db SOH ;[gnn] send start-of-packet
- prtcnt: db 0 ;[pcc008] prtchr fairness count
- timflg: db 0 ;[jd] timer flag: 0 -> no timer
- timval: dw 0 ;[jd] timer value
- wrn8: db 0 ;[jd] non-zero if 8-bit-lost warning sent
- qbchr: db '&' ;[jd] binary quote character.
- quot8: db 0 ;[jd] non-zero if doing 8-bit quoting
- logflg: db 0 ;Flag for a log file.
- ;[pcc005] 0 = no log
- ;[pcc005] x1 = logging on
- ;[pcc005] x2 = suspended
- ;[pcc005] 8xH (bit 7) = file open
- lognam: db 0 ;[pcc013] File to use for session logging
- db 'KERMIT ' ;[pcc013]
- db 'LOG' ;[pcc013]
- nexitf: db 0 ; set to 1 for exit to CPM after command tail
- takflg: db 0 ;[8] TAKE flag.
- ; Bit zero = 1 for take file in progress
- ; bit 4 = 1 if command line present/in progress
- ; Note: Take has priority over command line.
- initak: db 0ffh ;[MF]Cleared after initial TAKE (KERMIT.INI)
- taknam: db 0 ;[8] use default drive
- db 'KERMIT '
- db 'INI' ;[8] Inital file to TAKE KERMIT.INI
- takptr: ds 2 ;[8] Pointer to position in TAKE file input
- takfcb: ds 12 ;[8] fcb space for take file
- dw 0 ;[8] fill up extents etc with 00
- dw 0
- ds 16 ;[8] used by dos
- dw 0
- dw 0
- takdma: ds 128 ;[8]space to read TAKE file...
- prnbuf: ds 1 ; printer buffer. Output pointer
- ds 1 ; input offset pointer
- ds 256 ; give a large buffer
- ds 10 ; and a little spare
- ;
- ;
- ;
- ; Transmit space
- ;
- repcnt: db 0 ; repeat counter
- starc: db 0 ; star count
- rexbfl: db 0 ; retransmit flag (1=> retransmit)
- rexcnt: db 0 ; retransmit character count
- rexbuf: ds 128 ; max retransmit line length 128 characters
- xmtbuff:
- ds 128 ; 128 byte sector buffer
- xmtptr: db 0 ; offset pointer to xmtbuff above
- xmtfcb: ds 36 ; fcb for transmit file.
- ;
- ;INPUT and STRING space
- strlen: db 0 ; length of the string from INPUT and STRING
-
- ; Assorted other space
- errorc: db 0 ; error level set to xxx
- errorl: db 0 ; error level to test against
-
- remtxt: db 0 ; set <> 0 if D packets to screen
-
- hosths: ds 1 ; have we told the host to xoff? (is this duplicated)
- stbuff: ds 80h ; some space or the string buffer
- waitp: ds 2 ; wait command timer
- waitp1: ds 2 ; wait/input timer (copy of waitp)
- prntmp: ds 1 ; temporary space to put the caracter to print
- prnfl: db 0 ; printer flag. Used by TYPE/PRINT
- ;[MF][17]Following line no longer needed as TYPE uses the big buffer
- ;typptr: ds 2 ; pointer used by TYPE/PRINT
- equflg: db 0 ; set to non zero if copy files same
- nquiet: db 0 ; If non zero print from NOUT to display
-
- escflg: db 0 ;Escape flag (start off).
- fileio: db 0 ;Line-by-line from file (default off).
- xofflg: db 0 ;X-OFF (=^S) received from COMM-line
- ;X-ON (=^Q) received resets this
- clkbit: dw 0 ; 32 bit pseudo clock
- dw 0 ; MS bits of clock
- number: ds 2 ; Number in binary form from user input
- initflg:db 0 ; set to non zero when system initialised
- maxbsc: ds 1 ; save space to know how big system allows
- ; for multi-sector buffering. (Usually 8k?)
- ;
- ; Multiple FCB storage space. Used for the DIR command
- ; Later on, I want to shift this into space after the system
- ; dependent stuff, but then it becomes messy with pointers
- ; to pointers etc... [OBS]
- ;
- xfcbptr:
- ds 2 ; pointer to current fcb space
- fcbcnt: ds 1 ; Number of valid fcbs in space
- ;
- fcb0: ds 12 ; 36 bytes requred for a single fcb
- fcblen EQU $-fcb0 ; length of a single fcb
- ds maxfcb*fcblen ; space for maximum fcbs + 1
- ;
- hidefs: db 0ffh ; flag <> 0 if we show file size in DIR
-
- ; FCB sapce for COPY command
- cfcbs: ds 33 ; source fcb for copy file ops.
- ;[MF]and FRENAME ops.
- cfcbd: ds 33 ; destination fcb for copy ops.
- ;[MF]and FRENAME ops.
-
- colfcb: ds 33 ;[MF]Rename fcb for SET COLLISION
-
- ; Command tail data space etc
- cbptr: db 2 ; command tail pointer (0= length of tail)
- cbuff: ds 128 ; temp. space for potential command tail
-
- strcnt: db 0 ; string count for string operations...
-
- vtyval: ds 1 ; holds row number for VT52 cursor positioning
- chrcnt: ds 1 ;Number of chars in the file buffer.
-
- ; Various packet variables etc
- bytes: dw 0 ; 4 byte 'byte count' space
- dw 0
- filcnt: ds 1 ;Number of chars left to fill.
- outpnt: ds 2 ;Position in packet.
- bufpnt: ds 2 ;Position in file buffer.
- fcbptr: ds 2 ;Position in FCB.
- datptr: ds 2 ;Position in packet data buffer.
- cbfptr: ds 2 ;Position in character buffer.
- pktptr: ds 2 ;Position in receive packet.
- size: ds 1 ;Size of data from gtchr.
- curchk: ds 1 ;Current checksum type
- inichk: ds 1 ;Agreed upon checksum type
- czseen: ds 1 ;Flag that control-Z was typed
- dscflg: ds 1 ;[MF]Discard file if nonzero
- pktnum: ds 1 ;Packet number.
- numpkt: ds 2 ;Total number of packets sent.
- numrtr: ds 2 ;Total number of retries.
- numtry: ds 1 ;Number of tries on this packet.
- oldtry: ds 1 ;Number of tries on previous packet.
- state: ds 1 ;Present state of the automaton.
- ;*** start of new flags. Do not assume that just because these flags are
- ; present that the feature is available. I simply put them in 'for future use'
- rcapas:
- rcap1: db 0 ; receive capabilties byte 0
- rcap2: db 0 ; receive cpabilities byte 1
- scapas:
- scap1: db 0 ; send capabilities byte 0
- scap2: db 0 ; send capabilities byte 1
- rtimeo: db 0 ; receive timeout
- stimeo: db 0 ; send timeout
- rpadc: db 0 ; receive pad character
- spadc: db 0 ; send pad character
- rrept: db 0 ; receive repeat prefix
- srept: db 0 ; send repeat prefix
- rwindo: db 0 ; receive window size
- swindo: db 0 ; send window size
- rdpkt:
- rlpkt: dw 0 ; receive long packet length
- sdpkt:
- slpkt: dw 0 ; send long packet length
- sdckt: db 0 ; send default checktype
- rdckt: db 0 ; receive checktype (should be same as sdckt)
- ;*** end of new flags
- sohchr: db 1 ;Default Start-of-header chr is cntl-a
- ; Kermit packet starts here
- ; Byte 0 = start of packe character
- ; 1 = length of packet
- ; 2 = packet number
- ; 3 = packet type (S R I Z E B etc)
- packet: ds 4 ;Packet (data is part of it).
- ; Data part of packet (variable length - include checksum)
- data: ds 5AH ;Data and checksum field of packet.
- recpkt: ds 65H ;Receive packet storage (use the following).
- recpkx: db cr,'$' ;= = = buffer limit
- filbuf: ds 65H ;Character buffer.
- fnbuf: ds 20h ;[jd] file name buffer
- autorc: db 0 ;[obs] set to ON for autoreceive
-
- ; Temporary data space. Sometimes accesses as 16 bits (eg temp1/2)
- ;** Temp 1 & 2 must be in order
- lstchr: ;Last console input character.
- temp1: ds 1 ;Temporary storage.
- temp2: ds 1
- lincnt: ; used for counting lines in p20ln
- temp3: ds 1
- temp4: ds 1
- temp5: ds 1
- temp6: ds 1
- temp7: ds 1
- temp8: ds 1
- temp9: ds 1
- temp10: ds 1
- temp11: ds 1
-
-
- getrxflg:
- ds 1 ;[obs 22]
- quietd: db 0 ;loud display during file transfers
- argblk: ds 20H ;Used for subroutine arguments
-
- maxfil EQU 2 ; currently, only two names used.
- fcbblk: ds maxfil*10H ;Used for a list of FCB's
-
- ; [gnn] secondary filename storage (remote on send, local on get)
- remnam: ds 60 ;[gnn]
- remlen: ds 1 ;[gnn] length of name
-
- ; Bookkeeping storage for multiple-sector buffering. The actual buffer
- ; is somewhere in the system-dependent overlay. (at the end, I hope).
- nxtbuf: ds 2 ; Pointer to next sector
- seccnt: ds 1 ; Number of sectors buffered
- endsts: ds 1 ; Status for last read into buffer
- ;
- ;
- ; [MF] Storage for Remote Command processing
- ;
- ;
- rdl: ds 1 ;[MF]Holds accumulated length of remote data
- ;
- rcl: ds 1 ;[MF]Holds length of Remote command line arg
- ;
- remdat: ds 95 ;[MF]Packet data buffer (plenty big)
- ;
- rcom: ds 1 ;[MF] Remote Command type
- ;
- rprmpt: dw 0 ;[MF]Address of prompt strings
- ;
- rptr: dw 0 ;[MF]Remote command packet data pointer
- ;
- rscode: ds 3 ;[MF]Holds Remote Set command ASCII code
- ;
- ;
- org 7000h ; address for Kermit 4.11
- ; ORG ($ + 0ffH) AND 0ff00H ; move to start of next page
-
- ;
- ; hooks for system-dependent routines:
- ; This area is overwritten by the system-dependent overlay.
- ;
- lnkflg: dw 0 ; linkage information for consistency check.
- lnkent: dw 0 ; more of the same.
- ovlver: dw 0 ; pointer to overlay's version string
- family: dw 0 ;*NEW* [10] address of the family overlay (not CPSSYS)
- ;
- ; Input/output routines. Note that outmdm and outcon may actually be the
- ; same routine if selmdm and selcon do anything. (the same is true
- ; of inpmdm and inpcon).
- ;
- selmdm: jmp $-$ ; select modem for I/O
- outmdm: jmp $-$ ; output character in E to modem
- inpmdm: jmp $-$ ; read character from modem. return character or 0 in A.
- flsmdm: jmp $-$ ; flush pending input from modem
- selcon: jmp $-$ ; select console for I/O
- outcon: jmp $-$ ; output character in E to console
- inpcon: jmp $-$ ; read char from console. return character or 0 in A
- outlpt: jmp $-$ ; output character in E to printer
- lptstat:jmp $-$ ;*NEW*[10] see if printer ready to print a character
- ; If 0ffh then ok, if 0h then not ok.
- extern: jmp $-$ ;*NEW for 4.09* If $-$ is not zero, then its a jump to
- ; a routine to emulate any terminal type the user
- ; wants to implement.
- xbdos: jmp 0 ;*NEW* address of the bdos trap in this section
- ; of code. It is filled in initialisation.
- ;
- ; screen formatting routines
- clrlin: jmp $-$ ; erase current line
- clrspc: jmp $-$ ; erase current position (after backspace)
- delchr: jmp $-$ ; make delete look like backspace
- clrtop: jmp $-$ ; erase screen and go home
- ;
- ; these routines are called to display a field on the screen.
- scrend: jmp $-$ ; move to prompt field
- screrr: jmp $-$ ; move to error message field
- scrfln: jmp $-$ ; move to filename field
- scrnp: jmp $-$ ; move to packet count field
- scrnrt: jmp $-$ ; move to retry count field
- scrst: jmp $-$ ; move to status field
- rppos: jmp $-$ ; move to receive packet field (debug)
- sppos: jmp $-$ ; move to send packet field (debug)
- ;
- sysinit: jmp $-$ ; program initialization
- sysexit: jmp $-$ ; program termination
- syscon: jmp $-$ ; remote session initialization
- syscls: jmp $-$ ; return to local command level
- sysinh: jmp $-$ ; help text for interrupt (escape) extensions
- sysint: jmp $-$ ; interrupt (escape) extensions, including break
- sysflt: jmp $-$ ; filter for incoming characters.
- ; called with character in E.
- sysbye: jmp $-$ ; terminate remote session
- sysspd: jmp $-$ ; baud rate change routine.
- ; called with value from table in DE
- sysprt: jmp $-$ ; port change routine.
- ; called with value from table in HL
- sysscr: jmp $-$ ; screen setup for file transfer
- ; called with Kermit's version string in DE
- csrpos: jmp $-$ ; move cursor to row B, column C
- sysspc: jmp $-$ ; calculate free space for current disk
- mover: jmp $-$ ; block move
- prtstr: jmp $-$ ; *** NEW *** prtstr moved to overlay
- ;
- ; Data initialized by system-dependent overlay:
- ;
- pttab: ds 2 ; points to local equivalents to VT52 escape sequences
- spdtab: ds 2 ; address of baud rate command table, or zero
- spdhlp: ds 2 ; address of baud rate help table, or zero
- prttab: ds 2 ; address of port command table, or zero
- prthlp: ds 2 ; address of port help table, or zero
- timout: ds 2 ; Initial value for fuzzy timeout
- vtflg: ds 1 ; VT52 emulation flag
- escchr: ds 1 ; Storage for the escape character.
- speed: ds 2 ; storage for the baud rate
- port: ds 2 ; storage for port value
- prnflg: ds 1 ;[hh] printer copy flag (overlay may need it)
- dbgflg: ds 1 ; debugging flag
- ecoflg: ds 1 ; Local echo flag (default off).
- flwflg: ds 1 ; File warning flag (default on).
- ibmflg: ds 1 ; IBM flag (default off).
- cpmflg: ds 1 ; File mode flag (ascii/binary/default)
- incflg: ds 1 ;[MF]Incomplete flag (keep/discard)
- ;[MF](default discard)
- parity: ds 1 ; Current parity.
- spsiz: ds 1 ; Send packet size.
- rpsiz: ds 1 ; Receive packet size.
- stime: ds 1 ; Send time out.
- rtime: ds 1 ; Receive time out.
- spad: ds 1 ; Send padding.
- rpad: ds 1 ; Receive padding.
- spadch: ds 1 ; Send padding char.
- rpadch: ds 1 ; Receive padding char.
- seol: ds 1 ; Send EOL char.
- reol: ds 1 ; Receive EOL char.
- squote: ds 1 ; Send quote char.
- rquote: ds 1 ; Receive quote char.
- chktyp: ds 1 ; Checksum type desired
- tacflg: ds 1 ; TACTrap flag (zero=off, nonzero=on; when non-zero,
- ; contains current TAC intercept character)
- tacchr: ds 1 ; TAC intercept character
- bufadr: ds 2 ; Pointer to big buffer for multiple-sector I/O
- bufsec: ds 1 ; Number of sectors big buffer can hold (0 means 256)
- ffussy: ds 1 ; if nonzero, don't permit <>.,;?*[] in CP/M filespec.
- ; space used by directory command; here because space calculation is
- ; (operating) system-dependent
- bmax: ds 2 ; highest block number on drive
- bmask: ds 1 ; (records/block)-1
- bshiftf: ds 1 ; number of shifts to multiply by rec/block
- nnams: ds 1 ; counter for filenames per line
-
- lnksiz equ $-lnkflg ; length of linkage section, for consistency check.
-
- END START
-